package com.selfdiscipline.domain.repository

import com.selfdiscipline.data.local.entity.TaskEntity
import com.selfdiscipline.data.model.Task
import kotlinx.coroutines.flow.Flow
import java.time.LocalDateTime

/**
 * 任务仓库接口
 * 定义了与任务相关的数据操作
 */
interface TaskRepository {
    /**
     * 获取所有任务
     */
    fun getAllTasks(): Flow<List<TaskEntity>>
    
    /**
     * 获取活跃任务（未完成）
     */
    fun getActiveTasks(): Flow<List<TaskEntity>>
    
    /**
     * 获取已完成任务
     */
    fun getCompletedTasks(): Flow<List<TaskEntity>>
    
    /**
     * 获取特定时间段内已完成的任务
     */
    fun getCompletedTasksInRange(startDate: LocalDateTime, endDate: LocalDateTime): Flow<List<TaskEntity>>
    
    /**
     * 通过ID获取任务
     */
    suspend fun getTaskById(id: Long): TaskEntity?
    
    /**
     * 插入任务
     */
    suspend fun insertTask(task: TaskEntity): Long
    
    /**
     * 更新任务
     */
    suspend fun updateTask(task: TaskEntity)
    
    /**
     * 删除任务
     */
    suspend fun deleteTask(id: Long)
    
    /**
     * 完成任务
     */
    suspend fun completeTask(id: Long, completedAt: LocalDateTime = LocalDateTime.now())
    
    /**
     * 获取待处理任务
     */
    fun getPendingTasks(): Flow<List<Task>>
} 